package com.triones.api.service;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.triones.api.entity.CryptoWalletDO;
import com.triones.api.entity.LeptageQuoteDO;
import com.triones.api.entity.WithdrawCryptoRequstBodyBO;
import com.triones.api.entity.bo.*;
import com.triones.api.entity.param.CryptoParams;
import com.triones.api.entity.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 加密货币钱包 -接口
 */
public interface CryptoWalletService {

    /**
     * 加密货币钱包列表
     * @return
     */
    List<CryptoWalletVO> apiWalletList();

    /**
     * 交易记录分页列表
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<CryptoBillVO> apiTradePageList(CryptoParams params, PageQuery pageQuery);

    /**
     * 提现
     * @param bo
     */
    boolean exchange(ExchangeBO bo);

    /**
     * 加密货币钱包详情
     * @param ccy
     * @param chain
     * @return
     */
    CryptoWalletVO walletDetail(String ccy, String chain);

    /**
     * 提币
     * @param bo
     * @return
     */
    boolean crypto(CryptoBO bo);

    /**
     * 查询可用转账地址列表
     * @param ccy
     * @param chain
     * @return
     */
    List<CryptoInCommonUseAddressVO> inCommonUseAddressPageList(String ccy, String chain, String keyword);

    /**
     * 充值测试
     * @param dto
     * @return
     */
    boolean mockDepositCrypto(CryptoWalletDO dto);

    /**
     * 钱包余额
     * @param accountId
     * @return
     */
    List<Map> mockBalance(String accountId);

    /**
     * 交易详情
     * @param id
     * @return
     */
    CryptoBillVO apiTradeDetail(Long id);

    /**
     * 模拟提币交易结果
     * @param bo
     * @return
     */
    Boolean mockWithdrawCrypto(WithdrawCryptoRequstBodyBO bo);

    /**
     * 划转
     * @param bo
     * @return
     */
    Boolean transfer(TransferRequestBodyBO bo,String direction,Long uid);

    /**
     * 查询公链钱包列表
     * @param ccy
     * @return
     */
    List<CryptoWalletVO> apiChainWalletList(String ccy);

    /**
     * leptage询价
     * @param bo
     * @return
     */
    LeptageQuoteDO leptageQuote(LeptageQuoteBO bo);

    /**
     * 合集钱包余额
     * @param ccy
     * @return
     */
    List<Map> totalBalance(String ccy);

    /**
     * 换汇
     * @param ccyPair
     * @param sellAmount
     * @return
     */
    Map totalExchange(String ccyPair, String sellAmount);

    /**
     * 获取提币手续费
     * @param chain
     * @return
     */
    String getCryptoWithdrawFee(String chain);

    /**
     * 通用换汇
     * @param ccyPair
     * @param sellAmount
     * @return
     */
    void exchange(String ccyPair, String sellAmount, Long quoteId);

    /**
     * 系统提现
     * @param walletCcy
     * @param payoutCcy
     * @param walletAmount
     */
    void sysWithdraw(String walletCcy,String payoutCcy,String walletAmount);
}
